package com.nvwa.dto.tree;

import java.util.List;

/**
 * 树形结构节点模型
 */
public interface TreeNode<ID extends Number, T extends TreeNode<ID, T>> {
    /**
     * 获取当前节点ID
     *
     * @return 当前节点ID
     */
    ID getNodeId();

    /**
     * 设置当前节点ID
     *
     * @param nodeId 当前节点ID
     */
    void setNodeId(Number nodeId);

    /**
     * 获取当前节点的父节点ID
     *
     * @return 当前节点的父节点ID
     */
    ID getNodeParentId();

    /**
     * 设置当前节点的父节点ID
     *
     * @param nodeParentId 当前节点的父节点ID
     */
    void setNodeParentId(Number nodeParentId);

    /**
     * 获取当前节点在同级节点中的顺序，返回null，则不排序
     *
     * @return 当前节点在同级节点中的顺序
     */
    default Integer getNodeOrder() {
        return null;
    }

    /**
     * 设置当前节点在同级节点中的顺序
     *
     * @param nodeOrder 当前节点在同级节点中的顺序
     */
    default void setNodeOrder(Integer nodeOrder) {
    }

    /**
     * 获取当前节点的子节点
     *
     * @return 当前节点的子节点
     */
    List<T> getNodeChildren();

    /**
     * 设置当前节点的子节点
     *
     * @param children 子节点集合
     */
    void setNodeChildren(List<T> children);
}
